home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / gnu / gnugo1_1.lha / gnugo / count.c < prev    next >
C/C++ Source or Header  |  1989-03-07  |  3KB  |  99 lines

  1. /*
  2.                 GNU GO - the game of Go (Wei-Chi)
  3.                 Version 1.1   last revised 3-1-89
  4.            Copyright (C) Free Software Foundation, Inc.
  5.                       written by Man L. Li
  6.                       modified by Wayne Iba
  7.                     documented by Bob Webber
  8. */
  9. /*
  10. This program is free software; you can redistribute it and/or modify
  11. it under the terms of the GNU General Public License as published by
  12. the Free Software Foundation - version 1.
  13.  
  14. This program is distributed in the hope that it will be useful,
  15. but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. GNU General Public License in file COPYING for more details.
  18.  
  19. You should have received a copy of the GNU General Public License
  20. along with this program; if not, write to the Free Software
  21. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  
  23. Please report any bug/fix, modification, suggestion to
  24.  
  25. mail address:   Man L. Li
  26.                 Dept. of Computer Science
  27.                 University of Houston
  28.                 4800 Calhoun Road
  29.                 Houston, TX 77004
  30.  
  31. e-mail address: manli@cs.uh.edu         (Internet)
  32.                 coscgbn@uhvax1.bitnet   (BITNET)
  33.                 70070,404               (CompuServe)
  34. */
  35.  
  36. #include <stdio.h>
  37.  
  38. #define EMPTY 0
  39.  
  40. extern unsigned char p[19][19], ml[19][19];
  41. extern int lib;
  42.  
  43. count(i, j, color)
  44. /* count liberty of color piece at i, j */
  45. int i, j, color;
  46. {
  47. /* set current piece as marked */
  48.  ml[i][j] = EMPTY;
  49.  
  50. /* check North neighbor */
  51.  if (i != EMPTY)
  52.    {
  53.     if ((p[i - 1][j] == EMPTY) && ml[i - 1][j])
  54.       {
  55.        ++lib;
  56.        ml[i - 1][j] = EMPTY;
  57.      }
  58.     else
  59.        if ((p[i - 1][j] == color) && ml[i - 1][j])
  60.       count(i - 1, j, color);
  61.   }
  62. /* check South neighbor */
  63.  if (i != 18)
  64.    {
  65.     if ((p[i + 1][j] == EMPTY) && ml[i + 1][j])
  66.       {
  67.        ++lib;
  68.        ml[i + 1][j] = EMPTY;
  69.      }
  70.     else
  71.        if ((p[i + 1][j] == color) && ml[i + 1][j])
  72.       count(i + 1, j, color);
  73.   }
  74. /* check West neighbor */
  75.  if (j != EMPTY)
  76.    {
  77.     if ((p[i][j - 1] == EMPTY) && ml[i][j - 1])
  78.       {
  79.        ++lib;
  80.        ml[i][j - 1] = EMPTY;
  81.      }
  82.     else
  83.        if ((p[i][j - 1] == color) && ml[i][j - 1])
  84.       count(i, j - 1, color);
  85.   }
  86. /* check East neighbor */
  87.  if (j != 18)
  88.    {
  89.     if ((p[i][j + 1] == EMPTY) && ml[i][j + 1])
  90.       {
  91.        ++lib;
  92.        ml[i][j + 1] = EMPTY;
  93.      }
  94.     else
  95.        if ((p[i][j + 1] == color) && ml[i][j + 1])
  96.       count(i, j + 1, color);
  97.   }
  98. }  /* end count */
  99.